package com.udi.project.business.local.gs1.controller;


import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.udi.common.exception.base.BaseException;
import com.udi.framework.web.controller.BaseController;
import com.udi.framework.web.domain.AjaxResult;
import com.udi.project.business.local.gs1.domain.BeUsable;
import com.udi.project.business.local.gs1.domain.SelGsMesVo;
import com.udi.project.business.local.gs1.service.Gs1GenerateService;
import com.udi.project.business.pojo.damain.BarCodeEntity;
import com.udi.project.business.utils.code.BarCodeUtils;
import org.apache.ibatis.annotations.Param;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import java.io.IOException;
import java.util.List;

/**
*
 * @author Admin
 * GS1生成控制器
 */
@Controller
@RequestMapping("/Gs1Generate")
public class Gs1GenerateController extends BaseController {

    @Autowired
    private BarCodeUtils barCodeUtils;
    @Autowired
    private Gs1GenerateService gs1GenerateService;

    /**
    *
     * @Description:GS1-128一维码生成器
     * @return: byte[]
     * @Date: 2021/8/12 9:08
     * http://localhost:8080/Gs1Generate/Code128
     */
    @RequestMapping("/Code128")
    @ResponseBody
    public byte[] barCode128(List<BarCodeEntity> barCodeEntity) throws IOException{
        byte[] file = null;
            for (BarCodeEntity bar : barCodeEntity) {
                BarCodeEntity barCodeEntity1 = new BarCodeEntity();
                barCodeEntity1.setMessage(bar.getMessage());
                barCodeEntity1.setWithQuietZone(bar.isWithQuietZone());
                barCodeEntity1.setHideText(bar.isHideText());
                barCodeEntity1.setLocal(bar.isLocal());
                file = barCodeUtils.generateBarCode128(barCodeEntity1);
            }
        return file;
    }


    /**
    *
     * @Description: GS1生成器
     * @param beUsable 有效期生产日期等，前端需传入哪条生产线与生成数量【数量默认1】
     *序列号：
     *      英文字母：生产线
     *      数字：生产总量【如：如果生产100件商品则从1-100】
     *    示例：A1  B2 A99
     *
     *批号：
     *     与序列号相同规则 但在生产线的后面加B【Batch】
     *     示例：
     *          AB1  BB2 CB128
     *
     *注意：如果只选择生成 序列号或批号 没有填写的部分则不需要传入任何字段 否则会起冲突
     * @return: java.lang.String
     * @Date: 2021/8/16 15:38
     * //要求传入：DI码，商品名称，di_id，生产日期，有效期，序列号或批号，生成数量 BeUsable实体接收
     * http://localhost:8080/Gs1Generate/gs1
     */
    @RequestMapping("/createGs1")
    @ResponseBody
    public AjaxResult codeGs1(BeUsable data){
        try{
            return AjaxResult.success("共"+gs1GenerateService.generate(data)+"个GS1-128码生成成功！");
        }catch (BaseException e){
            System.out.println("Exception：");
            return error("生成失败！原因："+e.getMessage());
        }
    }

    @RequestMapping("/selgs1")
    @ResponseBody
    public JSONObject selGs1(){
        JSONObject s = new JSONObject();
        JSONArray c = new JSONArray();
        s.put("code",0);
        s.put("count",10);
        s.put("data",c);
        return  s;
    }

    @RequestMapping("/getedit")
    @ResponseBody
    public int getedit(@Param("data") String data){
        JSONArray jsArr = JSONObject.parseArray(data);
        System.out.println("165----------->"+jsArr);
        List<SelGsMesVo> list = JSONObject.parseArray(JSONObject.toJSONString(jsArr), SelGsMesVo.class);
        Integer a = gs1GenerateService.gsedit(list);
        System.out.println("168"+a);
        return a;
    }

    @PostMapping("/getdel")
    @ResponseBody
    public int getedel(@RequestBody String data){
        JSONArray jsArr = JSONObject.parseArray(data);
        System.out.println("178----------->"+jsArr);
        List<SelGsMesVo> list = JSONObject.parseArray(JSONObject.toJSONString(jsArr), SelGsMesVo.class);
        Integer a = gs1GenerateService.gsdel(list);
        return a;

    }
}
